#include "ipc.h"
int main(int argc,char *argv[])
{
	//可在在命令行第一参数指定一个进程睡眠秒数,以调解进程执行速度
	if(argv[1] != NULL) rate = atoi(argv[1]);
	else rate = 1; //不指定为1秒
	signal(SIGINT,(sighandler_t)sigcat); //注册一个本进程处理键盘中断的函数
	//初始化同步机制
	ipc_init();
	//循环执行模拟生产者不断放产品
	while(1){
		//如果缓冲区满则生产者阻塞
		P(prod_sem);
		//如果另一生产者正在放产品,本生产者阻塞
		P(pmtx_sem);
		//用写一字符的形式模拟生产者放产品,报告本进程号和放入的字符及存放的位置
		buff_ptr[*pput_ptr] = 'A'+ *pput_ptr;
		printf("%d producer put: %c to Buffer[%d]\n",getpid(),buff_ptr[*pput_ptr],*pput_ptr);
		//模拟写延迟
		sleep(rate);
		//存放位置循环下移
		*pput_ptr = (*pput_ptr+1) % buff_num;
		//唤醒阻塞的生产者
		V(pmtx_sem);
		//唤醒阻塞的消费者
		V(cons_sem);
	}
	return EXIT_SUCCESS;
}


